home *** CD-ROM | disk | FTP | other *** search
-
- HARD DISK UPGRADE MINI HOW-TO
-
- Yves Bellefeuille,
- yan@ottawa.com
-
-
-
- Version 1.0,
- 31 January 1998
- _________________________________________________________________
-
-
-
- _How to copy a Linux system from one hard disk to another._
- _________________________________________________________________
-
-
-
- 1. Install both disks on your system
- 2. Unmount non-Linux partitions
- 3. Partition the new disk
- 4. Format the new disk
- 5. Mount the new disk
- 6. Copy the files from the old disk to the new disk
- 7. Modify /etc/fstab as appropriate
- 8. Prepare LILO to boot the new disk
- 9. Remove the old disk
- 10. Reboot the system, install LILO on the new disk
- _________________________________________________________________
-
-
-
- Recently, I replaced my small 249 Mb hard disk with a larger disk. I
- wanted to transfer my entire Linux system, including LILO, from the
- old disk to the new disk. This is how I did it.
-
- In the following explanation, I use "/dev/hda" to denote the "old"
- disk, and "/dev/hda1" means the old Linux partition. "/dev/hdb" means
- the "new" disk, and "/dev/hdb1" means the new Linux partition.
-
- Therefore, I'm assuming that Linux is on the first partition of the
- first disk. Modify this as appropriate for your set-up.
-
- This document is based on my own system, running Red Hat 4.2, and I've
- tested all the commands that follow with that distribution. I've also
- tested them under Debian 1.3.1 and Slackware 3.3, and I indicate a few
- differences to note if you're using those distributions.
-
- If the commands don't work properly on your system, please let me
- know, telling me what version of Linux you're using.
- _________________________________________________________________
-
-
-
- 1. Install both disks on your system
-
-
-
- Modern systems can accept four "EIDE" devices on the hard disk
- controller, so there shouldn't be any problem installing both disks on
- your system at the same time, even if you also have other EIDE
- devices. Hard disks and CD-ROM drives are typical EIDE devices. Floppy
- drives and tape drives are usually connected to the floppy drive
- controller rather than to the hard disk controller.
-
- SCSI adapters are even more flexible and can accept seven devices. If
- you're lucky (and rich) enough to have a SCSI adapter, you probably
- already know this, and you probably know which of your devices are
- SCSI devices! For more information, see the SCSI How-To.
-
- Even the oldest systems can accept two devices on the hard disk
- controller, so you can still install both hard disks at the same time.
- However, if you already have another device installed in addition to
- your hard disk (for example, if you have both a hard disk and a CD-ROM
- drive), you'll have to remove the other device to be able to install
- the old hard disk and the new hard disk at the same time.
-
- You must configure the disks as "master" or "slave" by installing the
- disks' jumpers as appropriate. You'll often find configuration
- information on the disks themselves; if not, consult the manuals or
- the disks' manufacturers.
-
- You must also inform the BIOS of the disks' presence and of their
- "geometry". Usually, you enter the BIOS setup programme by pressing a
- key during the system boot-up. Here's what to do for some common
- BIOSes:
-
-
-
- American Megatrends (AMI): Del key during Power-On Self-Test (POST)
-
- Award: Ctrl-Alt-Esc
-
- Compaq: F10 key after the square appears in the top right corner of
- the screen during boot-up
-
- Dell: Ctrl-Alt-Enter
-
- DTK: Esc key during Power-On Self-Test
-
- IBM PS/2: Ctrl-Alt-Del, then Ctrl-Alt-Ins when the cursor is in the
- top right corner
-
- Phoenix: Ctrl-Alt-Esc, or Ctrl-Alt-S, or Ctrl-Alt-Enter
-
- Many older systems require an Installation or Reference Disk.
-
-
-
- (I'm interested in receiving information on other BIOSes to add them
- to this list.)
-
- Reboot the system and login as root.
- _________________________________________________________________
-
-
-
- 2. Unmount non-Linux partitions
-
-
-
- Some people like to mount partitions from other operating systems
- (DOS, Windows, OS/2, etc.) so they can use them under Linux. These
- partitions must be created and copied under their own operating
- system, and you should unmount them before copying your Linux
- partition. For example, if you have a DOS partition mounted at /dos,
- you must unmount it with this command:
-
- umount /dos
-
-
-
- Note that the command is "umount", with the first letter "n" missing
- from the word "unmount".
- _________________________________________________________________
-
-
-
- 3. Partition the new disk
-
-
-
- Use this command to partition the new disk:
-
- fdisk /dev/hdb
-
-
-
- For more information on partitioning, see the Installation How-To and
- the Partitioning Mini How-To.
-
- If your new disk has over 1024 cylinders, see the Large Disk Mini
- How-To. In brief, you should install all files required to boot Linux
- within the first 1024 cylinders. One way to do this is to create a
- small partition (1 Mb or 2 Mb) just for the /boot directory at the
- beginning of the disk. (_Slackware only:_ The kernel is at /vmlinuz
- rather than /boot/vmlinuz, so you should put both the / directory and
- the /boot directory in this partition.)
-
- Partitions for systems other than Linux should be created using their
- own fdisk or equivalent command rather than with Linux's fdisk.
- _________________________________________________________________
-
-
-
- 4. Format the new disk
-
-
-
- Use the following command to format the new disk:
-
- mkfs.ext2 /dev/hdb1
-
-
-
- To check the disk for bad blocks (physical defects), add the -c option
- just before "/dev/hdb1".
-
- (Note: Contrary to what the man page states, the command "mkfs -t ext2
- -c /dev/hdb1" doesn't check for bad blocks under any of Red Hat,
- Debian or Slackware.)
- _________________________________________________________________
-
-
-
- 5. Mount the new disk
-
-
-
- Create a directory where you'll mount the new disk, for example
- /new-disk, and mount it there:
-
- mkdir /new-disk
- mount -t ext2 /dev/hdb1 /new-disk
-
-
- _________________________________________________________________
-
-
-
- 6. Copy the files from the old disk to the new disk
-
-
-
- You want to completely reproduce the disk structure, including links.
-
- However, you _don't_ want to copy the directory /new-disk, since this
- would copy the new disk to itself!
-
- Furthermore, you want to create the /proc directory on the new disk,
- but you don't want to copy its contents: /proc is a "virtual" file
- system and doesn't have any actual files, but rather contains
- information on the processes running on the system.
-
- Here are four different ways to copy the old disk to the new one. This
- may take quite a while, especially if you have a large disk or little
- memory. You can expect to be able to copy 10 Mb per minute, and
- possibly much more.
-
- You can follow the copy's progress by using the command "df" from
- another terminal. If you're as easily amused as I am, try "watch df"
- or "watch ls -l /new-disk" to see a report updated every two seconds;
- press Ctrl-C to end the display. Be aware that running the "watch"
- programme itself will slow down the copying.
- 1. cp -ax / /new-disk
-
-
-
- This is the simplest method, but will only work if your original
- Linux system is on a single disk partition. The -a option preserves
- the original system as much as possible. The -x option limits cp to
- a single file system; this is necessary to avoid copying the
- /new-disk and /proc directories.
- 2. cd / && cp -a `/bin/ls -1A | egrep -v "^new-disk$|^proc$"`
- /new-disk
-
-
-
- (Write this all on one line.)
-
- This goes to the root directory and then copies all files and
- directories except /new-disk and /proc to /new-disk. Note that the
- first option after ls is the number 1, not the letter L!
-
- This command should work in all circumstances.
- 3. (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd
- /new-disk && tar xpf -)
-
-
-
- (Write this all on one line.)
-
- This goes to the root directory, "tars" everything except /new-disk
- and /proc, switches to /new-disk and "untars" everything there. Note
- that there must not be a slash before or after the names of the
- directories in the --exclude options.
-
- (Note: The option -l doesn't work here, since tar will still
- re-create the directories /new-disk and /proc even though it doesn't
- copy their contents. Therefore, tar's -l option doesn't have the
- same behaviour as cp's -x option.)
-
- This method is somewhat slower than the others.
- 4. cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin
- /tmp /usr /var /new-disk
-
-
-
- (Write this all on one line.)
-
- The last directory, /new-disk, is the destination for the cp
- command. All the other directories are the sources. Therefore, here
- I'm copying all the directories I'm listing to /new-disk.
-
- With this method, you simply list yourself the directories you want
- to copy. Here I listed all my directories except /new-disk and
- /proc. If you can't use the other methods for any reason, you can
- always use this command to manually specify the directories you want
- to copy.
-
- With this method only, if there are any files in the root directory
- itself, you need another command to copy them. In particular, this
- is required with Debian and Slackware, since these distributions put
- files in the root directory:
-
- cp -dp /* /.* /new-disk
-
-
-
- After using any of these four methods, you must also create the /proc
- directory on the new disk:
-
- mkdir /new-disk/proc
-
-
-
- At this point, you may verify the file structure on the new disk, if
- you wish:
-
- umount /new-disk
- fsck.ext2 -f /dev/hdb1
- mount -t ext2 /dev/hdb1 /new-disk
-
-
-
- You may also use the following script to compare the two disks, to
- ensure that the files were copied properly:
-
-
- #!/bin/sh
- cd /
- for file in `/bin/ls -1A | egrep -v '^new-disk$|^proc$'`
- do
- find $file -xtype f -exec cmp \{\} /new-disk/\{\} \;
- done
-
-
-
- (_Slackware only:_ A basic Slackware installation doesn't include the
- "cmp" or "diff" commands, so you won't be able to run this script if
- you have only installed the basic files.)
-
- This will only compare regular files, not character or block special
- files (in the /dev directory), sockets, etc., since the "cmp" command
- doesn't work properly with these. I would welcome suggestions on how
- to verify these "special" files.
- _________________________________________________________________
-
-
-
- 7. Modify /etc/fstab as appropriate
-
-
-
- If your new disk doesn't have the same partitions or organization as
- the old disk, modify the file /etc/fstab on the new disk as
- appropriate. Remember that this file is currently located at
- /new-disk/etc/fstab.
-
- Make sure that the disk partitions in the first column correspond to
- the organization you'll have with the new disk, once the old disk has
- been removed, and that you're only mounting one partition at "/" as
- shown in the second column.
- _________________________________________________________________
-
-
-
- 8. Prepare LILO to boot the new disk
-
-
-
- This is the most complicated step. I'm assuming that LILO is installed
- on the hard disk's Master Boot Record (MBR); this seems to be the most
- common configuration.
-
- You want to install LILO on what's presently the second hard disk.
- It's clear that LILO can't _run_ from the second hard disk; however,
- LILO's documentation does anticipate that you might want to _install_
- LILO on the second hard disk, for example if the first hard disk will
- be removed:
-
-
-
- LILO can't be stored at any of the following locations:
-
- - on the second hard disk. (Unless for backup purposes, if the
- current first disk will be removed or disabled, or if some other
- boot loader is used, that is capable of loading boot sectors from
- other drives.)
-
-
-
- However, the documentation doesn't explain the proper way to install
- LILO on the second hard disk if the first hard disk will be removed,
- and I've concluded after many attempts that it isn't possible to
- install LILO directly onto the MBR of the second hard disk and have it
- work correctly the first time.
-
- Instead, I suggest the use of a boot diskette to boot the new hard
- disk the first time.
-
- Insert an empty diskette, format it, create a file system on it and
- mount it:
-
- fdformat /dev/fd0H1440
- mkfs.ext2 /dev/fd0
- mount -t ext2 /dev/fd0 /mnt
-
-
-
- (_Debian only:_ The command "fdformat" is not included in a basic
- installation with Debian. If you don't have this command, you may omit
- it if the floppy is already formatted. In this case, you should check
- the diskette for bad blocks by adding "-c" after the "mkfs.ext2"
- command.
-
- (_Debian and Slackware only:_ Use the command "fdformat
- /dev/fd0h1440", with a lower case "h".)
-
- Copy all files in /boot to the diskette:
-
- cp -dp /boot/* /mnt
-
-
-
- (_Slackware only:_ Copy the file /vmlinuz to the boot diskette; use
- the command "cp /vmlinuz /mnt".)
-
- Create a new file /mnt/lilo.conf as follows:
-
-
- boot=/dev/fd0 # Install LILO on floppy disk.
- map=/mnt/map # Location of "map file".
- install=/mnt/boot.b # File to copy to floppy's boot sector.
- prompt # Have LILO show "LILO boot:" prompt.
- timeout=50 # Boot default system after 5 seconds.
- # (Value is in tenths of seconds.)
- image=/mnt/vmlinuz # Location of Linux kernel on floppy.
- label=linux # Label for Linux system.
- root=/dev/hda1 # Location of root partition on new hard
- # disk. Modify this as appropriate for
- # your system.
- # Note that you must use the name of the
- # future location, once the old disk has
- # been removed.
-
-
-
- (_Debian only:_ In the "image" line, use the actual name of the Linux
- kernel. For example, with Debian 1.3.1, use "/mnt/vmlinuz-2.0.29".)
-
- Install LILO on the boot diskette:
-
- /sbin/lilo -C /mnt/lilo.conf
-
-
-
- The -C option tells /sbin/lilo what configuration file to use.
-
- Unmount the diskette:
-
- umount /mnt
-
-
-
- and shut down the system.
- _________________________________________________________________
-
-
-
- 9. Remove the old disk
-
-
-
- After removing the old disk, remember to modify the disk jumpers and
- the BIOS information to reflect the changes.
- _________________________________________________________________
-
-
-
- 10. Reboot the system, install LILO on the new disk
-
-
-
- Reboot the system from the boot diskette you just made. To do so, you
- may have to modify your BIOS's boot-up sequence to "A:, C:".
-
- Make any necessary changes to the /etc/lilo.conf file, and run
- /sbin/lilo to install LILO on the new disk. With Debian, make sure
- that the "boot" line says "/dev/hda" rather than "/dev/hda1" or
- similar if you want to install LILO on the Master Boot Record.
-
- You can then try re-booting your system from your new hard disk to
- test if everything is working properly. If you run into any problems,
- you can still use the diskette you just made to boot your system.
- _________________________________________________________________
-
- Acknowledgements
-
-
-
- Special thanks to _Dr Konrad Hinsen_ of the Institut de biologie
- structurale, Grenoble, France, who has been kindly acting as my
- personal Linux guru. Thanks also to _Frank Damgaard_, _Paul Koning_
- and _Josh Rabinowitz_, and to _Scott Christensen_ for alerting me to
- some particularities of the Slackware distribution.
- _________________________________________________________________
-